#include <iostream>
#include <memory>

class Test
{
public:
    Test()
    {
        std::cout<<"构造函数"<<std::endl;
    }
    ~Test()
    {
        std::cout<<"析构函数"<<std::endl;
    }

    void show()
    {
        std::cout<< "Test" <<std::endl;
    }
};

int main()
{
    std::shared_ptr<Test> ptr(new Test);
    std::shared_ptr<Test> p2(ptr);
    std::shared_ptr<Test> p3;
    p3 = p2;

    // std::shared_ptr<Test> p4 = new Test;//不允许隐式转换

    //use_count:引用计数器
    //当前对同一内存实施管理的共享指针数量
    std::cout<<ptr.use_count()<<std::endl;

    p2 = std::make_shared<Test>();
    std::cout<<ptr.use_count()<<std::endl;

    p3 = p2;
    std::cout<<ptr.use_count()<<std::endl;
    //在最后一个指向该内存的共享指针不再指向它时,释放该内存
    ptr = p2;
    std::cout<<"end!"<<std::endl;
    return 0;
}